//package nirvana.core.exceptions;
//
//import lombok.extern.slf4j.Slf4j;
//import nirvana.core.domains.vo.ApiResult;
//import nirvana.core.domains.vo.ApiResultConstant;
//import org.springframework.dao.DataIntegrityViolationException;
//import org.springframework.dao.DuplicateKeyException;
//import org.springframework.http.HttpStatus;
//import org.springframework.web.HttpRequestMethodNotSupportedException;
//import org.springframework.web.bind.MethodArgumentNotValidException;
//import org.springframework.web.bind.annotation.ExceptionHandler;
//import org.springframework.web.bind.annotation.ResponseStatus;
//import org.springframework.web.bind.annotation.RestControllerAdvice;
//import org.springframework.web.multipart.MaxUploadSizeExceededException;
//import org.springframework.web.servlet.NoHandlerFoundException;
//
//
///**
// * GlobalExceptionHandler
// *
// * @author linkanyway
// * @version 1.0
// * @date 2023/10/30 21:43
// */
//@Slf4j
//@RestControllerAdvice
//public class GlobalExceptionHandler {
//    private String splitter = ",";
//
//    /**
//     * handle for biz exception
//     *
//     * @param e exception
//     */
//    @ExceptionHandler(BizException.class)
//    public ApiResult<?> handleBizException(BizException e) {
//        log.error (e.getMessage (), e);
//        return ApiResult.error (e.getMessage ());
//    }
//
//    /**
//     * handle for null pointer exception
//     *
//     * @param e
//     * @return api result
//     */
//    @ExceptionHandler(NullPointerException.class)
//    public ApiResult<?> handleNullPointerException(NullPointerException e) {
//        log.error (e.getMessage (), e);
//
//        return ApiResult.error ("对象为空，具体信息: " + e.getMessage ());
//    }
//
//    /**
//     * handle for method arguments vaalidate exception
//     *
//     * @param e error
//     * @return api result
//     */
//    @ExceptionHandler(MethodArgumentNotValidException.class)
//    public ApiResult<?> handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
//        StringBuilder stringBuilder = new StringBuilder ();
//        e.getAllErrors ().forEach (err -> {
//            stringBuilder.append (err.getDefaultMessage () + splitter);
//        });
//        String message = stringBuilder.toString ();
//        log.error (message.substring (0, message.length () - 1));
//        return ApiResult.error (message.substring (0, message.length () - 1));
//    }
//
//    /**
//     * handler for UnAuthorized401Exception
//     *
//     * @param e UnAuthorized401Exception instance
//     * @see UnAuthorized401Exception
//     */
//    @ExceptionHandler(UnAuthorized401Exception.class)
//    @ResponseStatus(HttpStatus.UNAUTHORIZED)
//    public ApiResult<?> handle401Exception(UnAuthorized401Exception e) {
//        log.error (e.getMessage (), e);
//        return new ApiResult<> (401, e.getMessage ());
//    }
//
//
//    /**
//     * No Handler for request path
//     *
//     * @param e exception
//     * @return ApiResult
//     */
//    @ExceptionHandler(NoHandlerFoundException.class)
//    public ApiResult<?> handlerNoFoundException(Exception e) {
//        log.error (e.getMessage (), e);
//        return ApiResult.error (404, "访问路径不存在，请检查路径是否正确");
//    }
//
//    /**
//     * Request method not support, get/post!
//     *
//     * @param e exception
//     * @return ApiResult
//     */
//    @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
//    public ApiResult<?> httpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) {
//        StringBuffer sb = new StringBuffer ();
//        sb.append ("系统不支持");
//        sb.append (e.getMethod ());
//        sb.append ("该请求方法，");
//        sb.append ("请尝试");
//        String[] methods = e.getSupportedMethods ();
//        if (methods != null) {
//            for (String str : methods) {
//                sb.append (str);
//                sb.append ("、");
//            }
//        }
//        log.error (sb.toString (), e);
//        return ApiResult.error (ApiResultConstant.RS_REQUEST_WRONG_METHOD, sb.toString ());
//    }
//
//    /**
//     * handle for duplicate record in database
//     *
//     * @param e exception
//     * @return ApiResult
//     */
//    @ExceptionHandler(DuplicateKeyException.class)
//    public ApiResult<?> handleDuplicateKeyException(DuplicateKeyException e) {
//        log.error (e.getMessage (), e);
//        return ApiResult.error ("数据库中存在重复记录");
//    }
//
//    /**
//     * handle  MaxUploadSizeExceededException
//     *
//     * @param e exception
//     */
//    @ExceptionHandler(MaxUploadSizeExceededException.class)
//    public ApiResult<?> handleMaxUploadSizeExceededException(MaxUploadSizeExceededException e) {
//        log.error (e.getMessage (), e);
//        return ApiResult.error ("文件大小超出上传限制！");
//    }
//
//    /**
//     * handle DataIntegrityViolationException
//     *
//     * @param e exception
//     * @return ApiResult
//     */
//    @ExceptionHandler(DataIntegrityViolationException.class)
//    public ApiResult<?> handleDataIntegrityViolationException(DataIntegrityViolationException e) {
//        log.error (e.getMessage (), e);
//        return ApiResult.error ("执行数据库异常,违反了完整性 例如：违反惟一约束、违反非空限制、字段内容超出长度等");
//    }
//
//    /**
//     * handler for exception
//     *
//     * @param e exception
//     * @return api result
//     */
//    @ExceptionHandler(Exception.class)
//    public ApiResult<?> handleException(Exception e) {
//        log.error (e.getMessage (), e);
//        //update-begin---author:zyf ---date:20220411  for：处理Sentinel限流自定义异常
//        Throwable throwable = e.getCause ();
//        return ApiResult.error ("操作失败，" + e.getMessage ());
//    }
//}
